﻿using FileManagerSystem.DbInfos;
using FileManagerSystem.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace FileManagerSystem.Helper
{
    public class CompleteFileHelper
    {
        /// <summary>
        /// 使映射文件的信息补充完整
        /// <para>主要补充路径信息，源文件id格式大小，md5等信息</para>
        /// </summary>
        /// <param name="dirReflectFiles">被映射的文件信息集合</param>
        /// <param name="sourceFiles">源文件信息集合</param>
        /// <returns></returns>
        public static List<CompleteFileResult> CompletingFileInfo(List<ReflectFileInf> dirReflectFiles,List<FileInf> sourceFiles)
        {
            var result = new List<CompleteFileResult>();
            //TODO：可能还需要去重？暂时先不管
            foreach (var dirReflectFile in dirReflectFiles)
            {
                /*
                 * 将映射文件与原始文件信息合并，
                 * 主要修改文件名，虚拟顶级目录，虚拟子目录，上传时间信息，后缀名
                 * 最后添加到dirFiles中，以便后续进行文件打包处理
                 */

                var sourceFile = sourceFiles.FirstOrDefault(x => x.Id == dirReflectFile.PId);
                if (sourceFile == null)
                    throw new Exception($"发生错误：guid为{dirReflectFile.Id}，名称为{dirReflectFile.Name}的映射文件对应的原始文件(guid为：{dirReflectFile.PId})被删除，请联系管理员处理！");

                result.Add(new CompleteFileResult
                {
                    Id = dirReflectFile.Id,
                    AbstractDirPath = dirReflectFile.AbstractDirPath,
                    AbstractTopDirGuid = dirReflectFile.AbstractTopDirGuid,
                    Extension = dirReflectFile.Extension,
                    Keep = dirReflectFile.Keep,
                    Name = dirReflectFile.Name,
                    UploadTime = dirReflectFile.UploadTime,
                    PId = sourceFile.Id,
                    DirPath = sourceFile.DirPath,
                    FileSize = sourceFile.FileSize,
                    MimeType = sourceFile.MimeType,
                    Md5 = sourceFile.Md5,
                });
            }
            return result;
        }
    }
}
